﻿Imports System.Data
Imports System.Configuration
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports TepcelDominio
Imports TepcelDAL.DBManager

Public Class ProductoDAL : Inherits DBManager
    Public Function NuevoProducto(ByVal producto As Producto) As String
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("SPInsertProducto")

        comando.Parameters.Add("@codigoProducto", SqlDbType.Char, 4).Value = producto.codigoProducto
        comando.Parameters.Add("@codigoCategoria", SqlDbType.Char, 5).Value = producto.Categoria.codigoCategoria
        comando.Parameters.Add("@nombreProducto", SqlDbType.VarChar, 80).Value = producto.nombreProducto
        comando.Parameters.Add("@descripcionProducto", SqlDbType.VarChar, 200).Value = producto.descripcionProducto
        comando.Parameters.Add("@codigoProductoProveedor", SqlDbType.Char, 7).Value = producto.Proveedor.codigoProveedor

        comando.Parameters("@codigoProducto").Direction = ParameterDirection.InputOutput

        MyBase.ExecuteQuery(comando)
        producto.codigoProducto = comando.Parameters("@codigoProducto").Value

        Return producto.codigoProducto

    End Function

    Public Function GetAllFromProducto() As List(Of Producto)
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("GetAllFromProducto")
        Return SelectObjectFactory(comando)
    End Function

    Public Function SearchFromProducto(ByVal texto As String) As List(Of Producto)
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("searchProducto")

        comando.Parameters.Add("@texto", SqlDbType.VarChar, 200).Value = texto

        Return SelectObjectFactory(comando)

    End Function

    Public Function DeleteProducto(ByVal codigoProducto As String) As Boolean
        Dim correcto As Boolean = False
        Dim comando As SqlCommand = MyBase.CreateSelectCommand("DeleteProducto")

        comando.Parameters.Add("@codigoProducto", SqlDbType.Char, 4).Value = codigoProducto

        If MyBase.ExecuteQuery(comando) > 0 Then
            correcto = True
        End If
        Return correcto
    End Function

    Private Function SelectObjectFactory(ByVal comando As SqlCommand) As List(Of Producto)
        Dim Lista As New List(Of Producto)
        Using reader As SqlDataReader = MyBase.ExecuteReader(comando)
            While reader.Read
                Dim Categoria As New Categoria(reader.GetString(3), reader.GetString(4))
                Dim Proveedor As New Proveedor(reader.GetString(5), reader.GetString(6))
                Dim Producto As New Producto(reader.GetString(0), reader.GetString(1), reader.GetString(2), Categoria, Proveedor)
                Lista.Add(Producto)
                Producto = Nothing
                Categoria = Nothing
                Proveedor = Nothing
            End While
        End Using
        Return Lista
    End Function
End Class
